package org.lanqiao.tjut.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.lanqiao.tjut.bean.UsersEntity;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class UserInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		/*
		 * 在prehandler方法中，使用返回值进行拦截处理：
		 * 返回false--进行拦截
		 * 返回true--进行放行，进入后续的拦截器中或者control层
		 * 
		 * 对于登录请求的URl连接进行识别，并允许其通过拦截器
		 * 注意：
		 * 这里由于是使用URl进行识别，所以在编程的过程中需要将登录和非登录的请求URl名进行人为区分。
		 */
		if(request.getRequestURI().contains("/user/login")){
			//检测出是登录请求，进行放行
			return true;
		}
		
		/*
		 * 非登录请求：
		 * 获取当前请求session中是否缓存了用户登录信息
		 * 如果缓存了用户登录信息，则进行放行
		 * 否则，进行拦截，返回登录界面
		 */
		//取出session缓存中的用户信息
		UsersEntity userE = (UsersEntity) request.getSession().getAttribute("LoginedUserInfo");
		if(userE !=null && userE.getUsername() != null && !userE.getUsername().equals("")){
			//用户信息验证成功，进行放行
			return true;
		}else{
			/*
			 * 用户信息验证失败，进行拦截
			 * 跳转回到登录页面，进行转发
			 */
			//转发
			request.getRequestDispatcher("index").forward(request, response);
			//重定向
			response.sendRedirect("../index.jsp");
		}
		return false;
		
	}

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

}
